package com.jay.fault.tolerant;

import com.jay.model.RpcResponse;
import lombok.extern.slf4j.Slf4j;

import java.util.Map;

/**
 * 容错策略 - 降级到其他服务
 * 当原始服务不可用或出现故障时，此策略用于切换到备用服务以保证系统的稳定性和可用性
 * 备注：实现该策略的类需要考虑如何有效地切换到备用服务，并处理可能的异常情况
 */
@Slf4j
public class FailBackTolerantStrategy implements TolerantStrategy {

    /**
     * 执行容错策略的方法
     * 当检测到原始服务调用失败或其他预定义的异常情况时，此方法将被调用以执行降级策略
     *
     * @param context 包含降级上下文信息的映射，如错误信息、备用服务详情等
     * @param e       原始服务调用过程中抛出的异常
     * @return RpcResponse 返回备用服务的响应结果，若未处理降级则返回null
     */
    @Override
    public RpcResponse doTolerant(Map<String, Object> context, Exception e) {
        // todo 可自行扩展，获取降级的服务并调用
        // 根据上下文信息和异常类型，实现具体的降级逻辑
        // 例如：根据context中的信息选择合适的备用服务并调用，处理调用结果并返回
        return null;
    }
}
